/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package gestor.base.de.datos;

import java.io.*;
import java.util.*;

/**
 *
 * @author Ana Silvia Gonzáles
 * @author Diego Enríquez
 */
public class Column implements Serializable{
    
    private String tipo;
    private ArrayList<String> registros;
    private int foreign;
    
    public Column(String tipo)
    {
        
        this.tipo=tipo;
        this.registros=new ArrayList<>();
        this.foreign=0;
        
    }

    public void setRegistros(ArrayList<String> registros) {
        this.registros = registros;
    }

    public ArrayList<String> getRegistros() {
        return registros;
    }

    public void setTipo(String tipo) {
        this.tipo = tipo;
    }


    public String getTipo() {
        return tipo;
    }


    /**
     * Agrega un registro a la columna
     * @param registro 
     */
    public void addField(String registro)
    {
        registros.add(registro.toUpperCase());
    }
    
    /**
     * Elimina todos los registros que sean iguales a valor
     * @param valor 
     */
    public void removeField(String valor)
    {
        for(int i=0;i<registros.size();i++)
        {
            if(registros.get(i).toUpperCase().equals(valor.toUpperCase()))
            {
                registros.remove(i);
            }
        }
    }
    
    /**
     * Elimina el registro en la posición enviada en el parametro
     * @param posicion 
     */
    public void removeField(int posicion)
    {
        registros.remove(posicion);
    }
    
    /**
     * Busca todos los registros que sean iguales a valor
     * @param valor
     * @return devuelve un ArrayList con las posiciones de los registros que cumplieron con la condición
     */
    public ArrayList<Integer> findField(String valor)
    {
        
        ArrayList<Integer> resp=new ArrayList<>();
        
        for(int i=0;i<registros.size();i++)
        {
            if(registros.get(i).toUpperCase().equals(valor.toUpperCase())) {
                resp.add(i);
            }
        }
        
        return resp;
        
    }
    
    /**
     * Cambia el valor del registro en la posicion indicada
     * @param pos
     * @param value 
     */
    public void updateRegistro(int pos, String value)
    {
        
        this.registros.set(pos, value);
        
    }
    
    /**
     * Obtiene los registros en un rango de posiciones
     * @param from
     * @param where
     * @return Columna con los registros
     */
    public Column getRegistros(int from, int where)
    {
        Column resp=new Column(this.tipo);
        ArrayList<String> reg=new ArrayList<>();
        
        for(int i=from;i<where;i++)
        {
            reg.add(registros.get(i));
        }
        
        resp.setRegistros(reg);
        
        return resp;
        
    }
    
    /**
     * Agrega una referencia de llave foranea
     */
    public void addForeign()
    {
        this.foreign++;
    }
    
    /**
     * Quita referencia de llave foranea
     */
    public void lessForeign()
    {
        this.foreign--;
    }

    public void setForeign(int foreign) {
        this.foreign = foreign;
    }

    public int getForeign() {
        return foreign;
    }
    
}
